WITH Ada.Text_IO;
WITH Etudiant.IO;
WITH GNAT.IO_Aux;
WITH Etudiant.Composants;
WITH ADA.IO_EXCEPTIONS;

PACKAGE BODY FICHIER IS

   PROCEDURE Ecrire (X : Etudiant.Etudiant) IS
      F : Ada.Text_IO.File_TYPE;
   BEGIN
      Ada.Text_IO.Open(File => F,
                       Mode => Ada.Text_IO.Out_File,
                       Name => CreerNom(X) ,
                       Form => "");
      Etudiant.IO.PutFichier(F => F, X => X);
      Ada.Text_IO.Close(File => F);
   END Ecrire;

   PROCEDURE EcrireAvecNomFichier (X : Etudiant.Etudiant; nomFichier : String) IS
      F : Ada.Text_IO.File_TYPE;
   BEGIN
      Ada.Text_IO.Open(File => F,
                       Mode => Ada.Text_IO.Out_File,
                       Name => nomFichier ,
                       Form => "");
      Etudiant.IO.PutFichier(F => F, X => X);
      Ada.Text_IO.Close(File => F);
   END EcrireAvecNomFichier;


   PROCEDURE Lire(X : OUT Etudiant.Etudiant) IS
      F : Ada.Text_IO.File_TYPE;
   BEGIN
      Ada.Text_IO.Put_Line("Saisie du nom de fichier (prenom.nom.svg)");
      DECLARE
         S : String := Ada.Text_IO.Get_Line;
      BEGIN
         IF(GNAT.IO_Aux.File_ExISts(Name => S)) then
            Ada.Text_IO.Open(File => F,
                             Mode => Ada.Text_IO.In_File,
                             Name => S ,
                             Form => "");

         else
            Ada.Text_IO.Put("Aucun fichier ou dossier de ce nom. ");
         END IF;
      END;

      Etudiant.IO.GetFichier(F => F, X => X);
      Ada.Text_IO.Close(File => F);

   END Lire;

   PROCEDURE LireAvecNom(X : OUT Etudiant.Etudiant; nomFichier : String) IS
      F : Ada.Text_IO.File_TYPE;
   BEGIN
      IF(GNAT.IO_Aux.File_ExISts(Name => nomFichier)) then
         Ada.Text_IO.Open(File => F,
                          Mode => Ada.Text_IO.In_File,
                          Name => nomFichier ,
                          Form => "");

      else
         Ada.Text_IO.Put("Aucun fichier ou dossier de ce nom. ");
      END IF;


      Etudiant.IO.GetFichier(F => F, X => X);
      Ada.Text_IO.Close(File => F);

   EXCEPTION
         when ADA.IO_EXCEPTIONS.STATUS_ERROR => Ada.Text_IO.Put_Line("Erreur lors de l'ouverture du fichier");

   END LireAvecNom;


   FUNCTION CreerNom(X : Etudiant.Etudiant) return String IS
      file_name : constant string := Etudiant.Composants.GetPrenomNom(X) & ".svg";
      F : Ada.Text_IO.File_TYPE;
   BEGIN

      Ada.Text_IO.Create(File => F,Mode => Ada.Text_IO.In_File,
                         Name => file_name,
                         Form => "");
      Ada.Text_IO.Close(File => F);
      return file_name;

   END CreerNom;


END FICHIER;
